/**
 * 使用介绍：
 * 1、需通过vue全局注册组件并使用
 * 2、使用例子：<directoryTree type="systemDataDict" @clickFun="testFun"></directoryTree>
 * 		type：需要查询目录的类型
 * 		clickFun：绑定的单机按钮的方法，共三个参数，依次为：传递给 data 属性的数组中该节点所对应的对象、节点对应的 Node、节点组件本身
 */
define(function(require, exports, module) {
	// vue，模板路由配置
	exports = {
		// 通过绑定标签属性传过来的值
		props: {
			// 需要查询的目录类型
			type: {
				type: String
			}
		},
		// 页面数据
		data: function() {
			return {
				// 树形控件过滤文本
				treeFilterText: "",
				// 目录数据
				data: [],
				// 默认展开的节点的 key 的数组
				defaultExpandedKeys: [],
				// 开启目录编辑
				showEditTree: false,
				// 默认读取的属性
				defaultProps: {
					// 子节点
					children: "directories",
					// 显示的标题
					label: "name",
					// 节点id字段
					nodeKey: "id"
				}
			}
		},
		// 数据监听
		watch: {
			"treeFilterText": {
				handler: function(val, oldVal) {
					this.$refs.tree.filter(val);
				},
				deep: true // 是否开启深度监听
			}
		},
		// 方法
		methods: {
			// 页面跳转
			goPage: function(path) {
				$indexScope.goPage(path);
			},
			// 通过正负数返回前进页面
			goHistory: function(n) {
				$indexScope.goHistory(n);
			},
			// 树形控件过滤
			filterNode: function(value, data) {
				if(!value) return true;
				return data[this.defaultProps.label].indexOf(value) !== -1;
			},
			// 查询字典目录
			queryDirectoryList: function() {
				var thisx = this;
				var params = {
					type: thisx.type // 查询数据字典目录
				};
				$indexScope.httpSend("systemDirectory/queryDirectoryList", params, function(data) {
					thisx.data = data.data;
				});
			},
			// 添加字典目录
			saveOrUpdateDirectory: function(node, data, isSave) {
				var thisx = this;
				var params = {
					id: "",
					name: "",
					type: thisx.type,
					parentId: ""
				};
				if(isSave) {
					params.parentId = data.id;
				} else {
					params.name = data.name;
					params.id = data.id;
					if(node.level != 1) {
						params.parentId = node.parent.data.id;
					}
				}
				alertModule().prompt(function(value) {
					params.name = value;
					$indexScope.httpSend("systemDirectory/saveOrUpdateDirectory", params, function(data) {
						thisx.queryDirectoryList();
						alertModule().alertMsg(data.msg);
					});
				}, "目录名称", params.name);
			},
			// 删除字典目录
			delDirectory: function(data) {
				var thisx = this;
				alertModule().confirmMsg("确定删除：" + data.name, function() {
					var params = {
						id: data.id
					};
					$indexScope.httpSend("systemDirectory/delDirectory", params, function(data) {
						thisx.queryDirectoryList();
						alertModule().alertMsg(data.msg);
					})
				});
			},
			// 节点展开执行的方法
			nodeExpand: function(data, node) {
				this.defaultExpandedKeys.push(data[this.defaultProps.nodeKey]);
			},
			// 节点关闭执行的方法
			nodeEollapse: function(data, node) {
				this.defaultExpandedKeys.remove(data[this.defaultProps.nodeKey]);
			},
			// 单机节点执行的方法
			nodeClick: function(data, node) {
				this.$emit("clickFun", data, node);
			}
		},
		// 导航钩子-页面渲染完运行的方法
		mounted: function() {
			this.queryDirectoryList();
		}
	};
	return exports;
});